package com.sad.jetpack.v1.datamodel.api;


import java.util.List;

public interface IDataModelProducer<RP> {

    IDataModelProducer<RP> newRequest(IDataModelRequest request);

    IDataModelProducer<RP> addInputInterceptor(IDataModelInterceptorInput<RP> input);

    IDataModelProducer<RP> addInputInterceptor(IDataModelInterceptorInput<RP> input,int index);

    IDataModelProducer<RP> removeInputInterceptor(int index);

    IDataModelProducer<RP> removeInputInterceptor(String tag);

    IDataModelProducer<RP> clearInputInterceptor();

    IDataModelProducer<RP> interceptorInputs(List<IDataModelInterceptorInput<RP>> interceptorInputs);

    IDataModelProducer<RP> addOutputInterceptor(IDataModelInterceptorOutput<RP> output);

    IDataModelProducer<RP> addOutputInterceptor(IDataModelInterceptorOutput<RP> output,int index);

    IDataModelProducer<RP> removeOutputInterceptor(int index);

    IDataModelProducer<RP> removeOutputInterceptor(String tag);

    IDataModelProducer<RP> clearOutputInterceptor();

    IDataModelProducer<RP> interceptorOutputs(List<IDataModelInterceptorOutput<RP>> interceptorOutputs);

    IDataModelProducer<RP> resetInterceptorInputs(IDataModelInterceptorInputResetting<RP> inputResetting);

    IDataModelProducer<RP> resetInterceptorOutputs(IDataModelInterceptorOutputResetting<RP> outputResetting);

    IDataModelProducer<RP> callback(IDataModelObtainedCallback<RP> callback);

    IDataModelProducer<RP> exceptionListener(IDataModelObtainedExceptionListener exceptionListener);

    IDataModelProducer<RP> engine(IDataModelProductEngine<RP> engine);

    IDataModelProduceFuture<RP> execute();

}
